建立空物件AirPlatform並把地板的圖檔當作子物件(這樣子物件圖檔的座標會是以父物件的中心點的相對座標)
在連接不同的圖檔做成一個平台時,可以按住V鍵可以完美貼合圖檔(不會有縫隙
接著在父物件AirPlatform加入Boxcollider,Size調整為3(子物件為三張各自佔了一格的圖檔,因此3可以完整包覆),再加入Platform effector 2D,且在Boxcollider勾選use by effector,並把collider縮到盡量最上層最小,以免影響動畫的改變
加入移動的腳本
using UnityEngine;
public class AirPlatform : MonoBehaviour
{
public Vector3 turnPoint;//設置在unity可變動的平台目標座標
Vector3 targetPosition,originPosition;
public float moveSpeed;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Awake()
{
originPosition=transform.position;//紀錄原始位置
}
// Update is called once per frame
void Update()
{
if(transform.position==originPosition)//當座標在起點
{
targetPosition=turnPoint;//目標座標就是turnPoint
}
else if(transform.position==targetPosition)//當座標在targetPosition
{
targetPosition=originPosition;//targetPosition變成原始位置
}
transform.position= Vector3.MoveTowards(transform.position,targetPosition,moveSpeed*Time.deltaTime);
}
}
接著解決Player不會跟著移動平台移動的問題
先在AirPlatform TagAirPlatform標籤,進入PlayerButtomCollider腳本
public class PlayerButtonCollider : MonoBehaviour
{
Player playerScript;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Awake()
{
playerScript=GetComponentInParent<Player>();
}
void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("Ground"))
{
playerScript.canJump=true;
playerScript.Anim.SetBool("jump",false);
}
if(collision.gameObject.CompareTag("AirPlatform"))
{
playerScript.canJump=true;
playerScript.Anim.SetBool("jump",false);
playerScript.transform.parent=collision.transform;
//把AirPlatform當成Player的父物件
}
}
void OnTriggerExit2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("AirPlatform"))
{
playerScript.transform.parent=null;
//當離開AirPlatform之後Player就去除Player的父物件
}
}
}